﻿using System;

namespace Framework.Core.Queue
{
    public interface IStatusQueuer<TKey, TValue, TStatus>
    {
        event QueuerStatusChangedHandler<TKey, TValue, TStatus> OnQueuerStatusChanged;

        event QueuerQueriedHandler<TKey, TValue, TStatus> OnQueuerQueried;

        TKey Key
        {
            get;
        }

        TValue Value
        {
            get;
        }

        TStatus Status
        {
            get;
            set;
        }

        DateTime InQueueTime
        {
            get;
        }

        DateTime LastQueryTime
        {
            get;
            set;
        }

        void OnInQueuer();
    }
}
